話就不多說了,直接開始今天的內容吧
閉包的別稱為「匿名函數」有三個特點
pub fn closure() {
let closure_add = |i: i32, j: i32| -> i32{i + j};
println!("{}", closure_add(1, 5));
}
以上就是最簡單的閉包,但是講的還沒有到很完整
let closure_add2 = | i, j | i + j;
println!("{}", closure_add2(7, 8));
如果要省略型式是可以這樣寫的
他會自動判斷傳入以及回傳形式。
不過,要注意的是
let closure_add2 = | i, j | i + j;
println!("{}", closure_add2(7, 8));
println!("{}", closure_add2(1.5, 5.1));
這樣是會編譯失敗的,因為在第一次使用時就決定了這個閉包的型式。
但是,這不就跟前面所寫的函數一樣嗎。
同樣是寫在函數中,也可以定義他的型別。
fn init_fn() {
fn inside(i: i32, j: i32) -> i32 { i + j };
}
這樣是可以的,只是說最大的差別在,不能使用外部的變數。
也就是說閉包可以這樣寫。
pub fn closure() {
let a = 1000;
let closure_add1 = |i: i32, j: i32| -> i32{i + j + a};
println!("{}", closure_add1(1, 5));
let closure_add2 = | i, j | i + j + a as f64;
//println!("{}", closure_add2(7, 8));
println!("{}", closure_add2(1.5, 5.1));
}
而函數這樣寫則會報錯
pub fn init_fn() {
let a = 5;
fn inside(i: i32, j: i32) -> i32 { i + j + a };
println!("{}", inside(5, 6));
}
以上大概就是簡單的閉包內容,閉包是以 trait 實現的,但是我也還沒介紹到 trait 所以就略過了。絕對不是我懶的講
那接下來要講的就是判別式的部份。
在 Rust 中,能夠像 C / C++ 一樣使用 if / else
這邊就不放在 Github 上了。
因為應該蠻好理解的(我懶了 QQ)
let a = 5;
if a == 5 {
println!("{}", a);
}
else if(a == 0) {
println!("{}", a);
}
else {
println!("NOT FIVE OR ZERO");
}
這邊的使用方法蠻簡單的
但是 if 判斷式其實還可以綁定在變數上。
像是這樣
let n = 5;
let a = if n > 5 {
5
}
else {
0
};
println!("{}", a);
如果說,這樣寫起來太過於醜陋,其實 Rust 有跟 C / C++ 中的 switch 差不多的 match
使用方式如下 :
let chk = 5;
match chk {
0 => println!("IT ZERO"),
5 => println!("IT FIVE"),
_ => println!("OTHER"),
}
那在 Rust 中可以使用 @ 來將變數綁定給其他變數 ex:
let chk = 5;
match chk {
0 => println!("IT ZERO"),
n @ 5 => println!("{}", n),
5 => println!("IT FIVE"),
_ => println!("OTHER"),
}
也可以用 num...num 來構造範圍。
也可以用 num | num | num 來構造多選項比對。(講的有點複雜用 code)
那在 Rust 中可以使用 @ 來將變數綁定給其他變數 ex:
let chk = 5;
match chk {
0 => println!("IT ZERO"),
0..10 => println!("IT IN 0..10"),
n @ 5 => println!("{}", n),
5 | 3 | 1 => println!("IT FIVE OR 3 OR 1"),
_ => println!("OTHER"),
}
那今天也寫了2000多字了
大概這樣 明天介紹啥我還在想 @@ 來個 loop 也不錯,順便幾道 Leetcode 吧!
有問題可以提問喔 owo/
9/9
我突然發現我少講一個點,就是當在使用判斷式
如: if else match 時,是不用像 C / C++ 一樣外面加一個括號的
if (a == 1){}
C++ 如果是這樣 Rust 就能直接省略
if a == 1 {}
總之 大概就這樣 半夜突然想到 QQ